package com.center.growcenterserver.common;

import lombok.Data;

/**
 * R 类是一个通用的响应实体类，旨在标准化服务端返回给客户端的响应数据格式。
 * 通过使用此封装类，可以确保所有API响应具有一致的结构，简化了前后端的数据交互过程。
 *
 * 主要属性包括：
 * - code: 响应状态码，200代表成功，500代表服务器内部错误等。
 * - message: 返回的消息，用于描述请求的结果或错误信息。
 * - type: 响应类型，如 "success", "error", "warning" 等。
 * - success: 标识请求是否成功处理的布尔值。
 * - data: 返回的数据对象，可以是任何类型的业务数据。
 *
 * 提供了一系列静态方法来快速创建不同类型的响应实例：
 */


@Data
public class R {

    private int code;

    private String message;

    private String type;

    private Boolean success;

    private Object data;

    public static R ok() {
        R r = new R();
        r.setCode(200);
        r.setSuccess(true);
        r.setType("success");
        r.setData(null);
        return r;
    }
    public static R success(String message) {
        R r = new R();
        r.setCode(200);
        r.setMessage(message);
        r.setSuccess(true);
        r.setType("success");
        r.setData(null);
        return r;
    }

    public static R success(String message, Object data) {
        R r = success(message);
        r.setData(data);
        return r;
    }

    public static R warning(String message) {
        R r = error(message);
        r.setType("warning");
        return r;
    }

    public static R error(String message) {
        R r = success(message);
        r.setSuccess(false);
        r.setType("error");
        return r;
    }

    public static R fatal(String message) {
        R r = error(message);
        r.setCode(500);
        return r;
    }
}
